From 19e55d620fc0793ec688377bb11b77bdd2c9e9cb Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Mon, 16 Apr 2012 06:51:43 +0200 Subject: [PATCH] GtkImage: Move g_clear_object() to gtk_image_finalize() This moves the freeing of the icon_helper from the destory to the finalize function to avoid segfaults when trying to access a destroyed object before it is disposed. This often happens in signal handlers which get called asynchronously after destroy. https://bugzilla.gnome.org/show_bug.cgi?id=674050 --- gtk/gtkimage.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/gtk/gtkimage.c b/gtk/gtkimage.c index fa87ea79be..14f3efc8f4 100644 --- a/gtk/gtkimage.c +++ b/gtk/gtkimage.c @@ -157,7 +157,7 @@ static void gtk_image_get_preferred_height (GtkWidget *widget, static void gtk_image_style_updated (GtkWidget *widget); static void gtk_image_screen_changed (GtkWidget *widget, GdkScreen *prev_screen); -static void gtk_image_destroy (GtkWidget *widget); +static void gtk_image_finalize (GObject *object); static void gtk_image_reset (GtkImage *image); static void gtk_image_set_property (GObject *object, @@ -199,10 +199,10 @@ gtk_image_class_init (GtkImageClass *class) gobject_class->set_property = gtk_image_set_property; gobject_class->get_property = gtk_image_get_property; + gobject_class->finalize = gtk_image_finalize; widget_class = GTK_WIDGET_CLASS (class); widget_class->draw = gtk_image_draw; - widget_class->destroy = gtk_image_destroy; widget_class->get_preferred_width = gtk_image_get_preferred_width; widget_class->get_preferred_height = gtk_image_get_preferred_height; widget_class->unmap = gtk_image_unmap; @@ -359,14 +359,14 @@ gtk_image_init (GtkImage *image) } static void -gtk_image_destroy (GtkWidget *widget) +gtk_image_finalize (GObject *object) { - GtkImage *image = GTK_IMAGE (widget); + GtkImage *image = GTK_IMAGE (object); g_clear_object (&image->priv->icon_helper); - - GTK_WIDGET_CLASS (gtk_image_parent_class)->destroy (widget); -} + + G_OBJECT_CLASS (gtk_image_parent_class)->finalize (object); +}; static void gtk_image_set_property (GObject *object, -- 2.30.2